
/* Generated by Interface Builder */

#import "String.h"
#import <strings.h>
#import <stdlib.h>
#import <stdio.h>
#import <NXCType.h>
#import <c.h>

@implementation String

- setString:(char *)AString
{
	// If it's outta bounds theres nothing to do
	if(!AString)
		return self;

	// First see if we have to allocate space to the string
	[self preAlloc :strlen(AString)+1];
	strcpy(buffer,AString);			/* Copy in string */

	return self;
}

- (char *)string
{
	return buffer;
}

- freeString
{
	if(!buffer)
		return self;	/* Get out if nothing to free */

	/* Free up string here */
	free(buffer);
	/* Blank buffer and length so we know it's blank */
	buffer = 0;
	length = 0;

	return self;
}

- (BOOL)writeString :(NXStream *)MyStream
{
	if(length)
		{
			int strlength = strlen(buffer);

			if(NXWrite(MyStream,buffer,strlength) != strlength)
				return FALSE;	/* A Problem */
		}

	return TRUE;
}

- (BOOL)writeWithTerminator :(NXStream *)MyStream :(char)terminator
{
	return [self writeWithTerminator :MyStream :&terminator :1];
}

- (BOOL)writeWithTerminator :(NXStream *)MyStream :(char *)terminator :(int)mylength
{
	if(![self writeString :MyStream])
		return FALSE;

	if(NXWrite(MyStream,terminator,mylength) != mylength)
		return FALSE;

	return TRUE;
}

- (int)readString: (NXStream *)MyStream
{
	char TempBuffer[2024];
	int mylength;

	mylength = 0;

	do
		{
		if(NXRead(MyStream,&TempBuffer[mylength],1) != 1)
			break;	/* Problem!! */
		if((!NXIsPrint(TempBuffer[mylength])) && (TempBuffer[mylength] != 0xA))
			continue;
		mylength++;
		}
	while(TempBuffer[mylength-1] != 0xA);

	if(mylength == 0) // Didn't read anything
		return 0;

	TempBuffer[mylength-1] = 0; /* Strip off linefeed */

	/* Allocate some memory for our buffer */
	[self setString:TempBuffer];

	return strlen(TempBuffer)+1;
}

- (void)free
{
	 [self freeString];
	 [super free];
}

- init
{
	 [super init];

	 /* Do my initialisation */
	 buffer = 0;
	 length = 0;
	 
	 return self;
}

- preAlloc :(int)size
{
	if(size <= length)
		return self;	// we already have that size available

	[self freeString];
	buffer = malloc(size);
	buffer[0] = 0;
	length = size;

	return self;
}

@end
